An event occurs when something significant happens in an information technology (IT) system. For instance, an event may be a business event, such as an application processing a new client order, or a system based event, such as a failure occurring in a critical part of the system.
Event infrastructures provide the runtime environment to route and/or persistently store and retrieve events from many different monitored systems. Monitors subscribe and receive events from an event infrastructure or directly from a monitored system.
The monitored application and system and the event infrastructure are typically designed for parallel execution to provide scalability. The parallel design of the monitored application or component can be realized through different programming models such as parallel execution of Enterprise Java beans in J2EE, specific programming languages for parallel systems, or business process execution languages such as BPEL.
The subscribing monitor often requires knowledge about the sequencing of event occurrences for various reasons. For instance, a metric can be calculated based on data gathered in two events A and B. The metric calculation may rely on the logical dependency of the two events, e.g. m=m+1 when one of the events occurs, and m=m*2 when the other of the events occurs.
One approach known in the art for dealing with logical dependencies is synchronization of emitting and transmitting events. When the emitting and transmitting of events is synchronized, events can be guaranteed to occur in order at the monitor, e.g. an event infrastructure. This approach imposes severe scalability problems in the monitored system.
Another approach is to deduce an event sequence based on a single event sequence counter. In this approach, every event includes an event counter. The event counter is unique per monitored component or application. In a transactional system this implies a sequencing of all transactions as a whole which results in a bottleneck and imposes scalability problems on the monitored system.
Another approach known in the art is to deduce an event sequence based on a timestamp. Following this approach, every event includes a timestamp of its occurrence. In a non-clustered system the event sequence can be deduced from the timestamp if the system clock is fine grained enough. In a clustered system clocks must be synchronized sufficiently fine-grained, which is an ambitious task and a challenge for implementation.